#pragma once
#include "Element_plane62.h"

class Element_plane62_BT :
    public::Element_plane62
{
public:
    virtual void setElement()override;
    virtual void coutElement()override;
    virtual void foutElement(std::ofstream& fout)override;

    virtual int getDOFNode()const override;
    virtual bool get_Ke(Eigen::MatrixXd& ke)override;
    virtual void get_Load(Eigen::VectorXd& Feq)override;
    void get_Load2(Eigen::VectorXd& Feq);
    void Assemble(std::vector<Eigen::VectorXd>& F1, std::vector<Eigen::VectorXd>& F2);
    void Assemble2(std::vector<Eigen::VectorXd>& F1, std::vector<Eigen::VectorXd>& F2);
    void get_A();
    void get_S();
    void get_I();
    void get_Nodeparameter(std::vector<Eigen::VectorXd>& x1, std::vector<Eigen::VectorXd>& x2);
    void get_Nodeparameter2(std::vector<Eigen::VectorXd>& x1, std::vector<Eigen::VectorXd>& x2);
    void get_Sw();
    void get_Sw(double& Sw);
    void get_J();
    void get_Iw();
    void get_a();
    void get_coord_s();
    void get_stress(Eigen::MatrixXd& in, std::vector<double>& Sforce, std::vector<double>& Scoord, std::vector<double>& Tangle);
    double get_w(double ci, double si);
    
private:
    std::vector<Eigen::VectorXd> parameterlist;    
};

